function setItem(name, item) {
  localStorage.setItem(name, JSON.stringify(item))
}
function getItem(name) {
  return JSON.parse(localStorage.getItem(name) || '[]')
}
// Vuex的数据一刷新就会消失，要放在localStorage里
export default {
  
  state: {
    // car: [ {id: 商品的id, count: 购买的数量, selected: 是否选中}, {} ]
    car: getItem('car'),
    // buy 存放的是需要购买的商品
    // 当我们点击去结算时，将buy数组中的商品去做结算操作
    buy: getItem('buy')
  },
  mutations: {
    // 添加商品到购物车
    addShopcart(state, goodsInfo) {
      // 注意 如果购物车中已经有了goodsinfo对应的商品，就应该修改对应商品的数量
      // 没有goodsinfo对应的商品，就添加goodsinfo的商品
      let flag = false  // 当flag为false时 表示购物车中没有相同的商品
      state.car.some(item => {
        if (parseInt(item.id) === parseInt(goodsInfo.id)) {
          item.count += parseInt(goodsInfo.count)
          flag = true
          return true
        }
      })
      if (!flag) {
        // 购物车中没有相同的商品, 将这儿goodsinfo放入购物车
        state.car.push(goodsInfo)
      }
      // 将localStorage里的car更新
      setItem('car', state.car)
    },
    // 修改商品数量
    updateGoodsInfo(state, goodsInfo) {
      console.log(123);
      
      state.car.some(item => {
        console.log(item);
        
        if (parseInt(item.id) === parseInt(goodsInfo.id)) {
          item.count = goodsInfo.count
          return true
        }
      })
      setItem('car', state.car)
    },
    // 修改商品的选中状态
    changeSelected(state, goodsInfo) {
      state.car.some(item => {
        if (parseInt(item.id) === parseInt(goodsInfo.id)) {
          item.selected = goodsInfo.selected
          return true
        }
      })
      setItem('car', state.car)
    },
    // 根据id 删除商品
    removeById(state, id) {
      state.car.find((item, index) => {
        if (parseInt(item.id) === parseInt(id)) {
          state.car.splice(index, 1)
          return true
        }
      })
      setItem('car', state.car)
    },
    // 将购物车中选中的商品添加到buy 数组中
    setBuy(state, goods) {
      state.buy = []
      // goods有数组就加上，没有就是shopcart页面 去结算功能创建buy
      if (goods) {
        // 将我们要购买的那一个商品(goods)加入购物车
        state.buy.push(goods)
      } else {
        state.car.forEach(item => {
          if (item.selected) {
            state.buy.push(item)
          }
        })
      }
      setItem('buy', state.buy)
    }
  },
  actions: {
    
  },
  getters: {
    // 获得商品数量
    getGoodsCount(state) {
      // goods: {701: 2, 845: 5}
      var goods = {}
      state.car.forEach(item => {
        goods[item.id] = item.count
      })
      return goods
    },
    // 获取商品有没有选中的状态值(selected)
    getGoodsSelected(state) {
      var goods = {}
      state.car.forEach(item => {
        goods[item.id] = item.selected
      })
      return goods
    },
    // 获取选中的商品件数
    getSelectedCount(state) {
      var count = 0;
      state.car.forEach(item => {
        if (item.selected) {
          count += item.count
        }
      })
      return count
    },
    // 获取选中的商品
    getSelectedGoods(state) {
      var goods = {}
      state.car.forEach(item => {
        if (item.selected) {
          goods[item.id] = item
        }
      })
      return goods
    },
    // 获取要购买的商品
    getBuy(state) {
      //  [ 107: {}, 208: {}]
      var goods = []
      state.buy.forEach(item => {
        goods[item.id] = item
      })
      return goods
    }
  },
  // 使多个模块内部名字不会冲突
  namespaced: true
}